@echo off
chcp 65001 >nul
title 诊断通知问题
color 0C

echo.
echo ╔═══════════════════════════════════════════╗
echo ║      诊断为什么通知栏没有图标             ║
echo ╚═══════════════════════════════════════════╝
echo.

echo [步骤 1] 编译并安装最新版本
echo ════════════════════════════════════════════
echo.

call gradlew assembleDebug --quiet

if errorlevel 1 (
    echo ❌ 编译失败
    pause
    exit /b 1
)

echo ✅ 编译成功
echo.

adb install -r app\build\outputs\apk\debug\app-debug.apk

if errorlevel 1 (
    echo ❌ 安装失败
    pause
    exit /b 1
)

echo ✅ 安装成功
echo.

echo [步骤 2] 授予所有权限
echo ════════════════════════════════════════════
echo.

echo 授予 Mock Location 权限...
adb shell appops set com.example.munidingwei android:mock_location allow

echo 授予定位权限...
adb shell pm grant com.example.munidingwei android.permission.ACCESS_FINE_LOCATION
adb shell pm grant com.example.munidingwei android.permission.ACCESS_COARSE_LOCATION

echo 授予通知权限 (Android 13+)...
adb shell pm grant com.example.munidingwei android.permission.POST_NOTIFICATIONS 2>nul

echo.
echo ✅ 权限已授予
echo.

echo [步骤 3] 清除日志并启动应用
echo ════════════════════════════════════════════
echo.

adb logcat -c
adb shell am start -n com.example.munidingwei/.MainActivity

timeout /t 3 >nul

echo.
echo 📱 请在手机上点击地图设置模拟位置
echo.
echo 等待10秒...
timeout /t 10 >nul

echo.
echo [步骤 4] 检查前台服务日志
echo ════════════════════════════════════════════
echo.

echo 查找前台服务相关日志：
adb logcat -d -s LocationForegroundService:* LocationService:* | findstr /C:"前台服务" /C:"startForeground" /C:"通知"

echo.
echo [步骤 5] 检查服务状态
echo ════════════════════════════════════════════
echo.

echo 查看是否有前台服务运行：
adb shell dumpsys activity services com.example.munidingwei | findstr /C:"LocationForegroundService" /C:"isForeground"

echo.
echo [步骤 6] 检查通知权限
echo ════════════════════════════════════════════
echo.

echo 查看通知权限状态：
adb shell dumpsys notification | findstr /C:"com.example.munidingwei"

echo.
echo [步骤 7] 检查通知渠道
echo ════════════════════════════════════════════
echo.

echo 查看通知渠道是否创建：
adb shell dumpsys notification | findstr /C:"mock_location_channel"

echo.
echo [步骤 8] 查看完整日志
echo ════════════════════════════════════════════
echo.

echo 正在提取完整日志到文件...
adb logcat -d > 完整日志.txt

echo ✅ 日志已保存到：完整日志.txt
echo.

echo ════════════════════════════════════════════
echo  诊断结果分析
echo ════════════════════════════════════════════
echo.

echo 请检查上面的输出：
echo.
echo ✅ 如果看到 "✅ startForeground 调用成功"
echo    → 代码层面没问题
echo.
echo ✅ 如果看到 "isForeground=true"
echo    → 前台服务正在运行
echo.
echo ❌ 如果看到 "❌ 启动前台服务失败"
echo    → 查看错误信息
echo.
echo ❌ 如果没有任何前台服务日志
echo    → 服务可能没有启动
echo    → 检查 LocationService 是否调用了 start()
echo.
echo ════════════════════════════════════════════
echo  可能的原因
echo ════════════════════════════════════════════
echo.
echo 原因1: 通知权限未授予 (Android 13+)
echo   → 手动在设置中授予通知权限
echo.
echo 原因2: 通知渠道被禁用
echo   → 在手机设置 → 应用 → 通知 中启用
echo.
echo 原因3: 前台服务没有启动
echo   → 查看 LocationService 日志
echo   → 确认调用了 LocationForegroundService.start()
echo.
echo 原因4: 系统通知被关闭
echo   → 检查系统通知设置
echo.
echo 原因5: DND 模式（勿扰模式）
echo   → 关闭勿扰模式
echo.

pause

echo.
echo ════════════════════════════════════════════
echo  手动检查步骤
echo ════════════════════════════════════════════
echo.
echo 1. 打开手机设置
echo 2. 进入"应用管理"或"应用"
echo 3. 找到"模拟定位应用"
echo 4. 点击"通知"
echo 5. 确保通知已启用
echo 6. 找到"模拟定位服务"渠道
echo 7. 确保渠道已启用
echo.
echo ════════════════════════════════════════════
echo.

pause

echo.
echo ════════════════════════════════════════════
echo  重新测试
echo ════════════════════════════════════════════
echo.

echo 现在重新测试...
echo.

adb shell am force-stop com.example.munidingwei
timeout /t 2 >nul

adb logcat -c
adb shell am start -n com.example.munidingwei/.MainActivity

echo.
echo 📱 请在手机上：
echo   1. 允许所有权限（包括通知）
echo   2. 点击地图设置模拟位置
echo   3. 观察通知栏
echo.

pause

echo.
echo 现在查看实时日志...
echo.

adb logcat -s LocationForegroundService:D LocationService:D

pause

